﻿#ifndef __SS_GL_BO_H__
#define __SS_GL_BO_H__
#include "../ssOpenGLSupport.h"

namespace StarSeeker
{
//opengl buffer object基类
class ssBO
{  
public:  
	ssBO();
	virtual ~ssBO();
	//创建vbo
	bool Create(u32 usage=SS_VBO_STATIC);
	//删除vbo
	void Delete();
	//使用当前VBO
	void Use();
	//不使用当前VBO
	void Nonuse();
	//初始化分配显存
	void InitData(const void* data, u32 len);
	//修改显存数据(起始偏移，数据长度，新数据)
	void Update(u32 offset, u32 size, const void* data);
#ifndef SS_USE_GLES2
	//es2.0不一定支持
	ssfloat* BeginMapping(u32 rw=GL_READ_WRITE);
	void EndMapping();
#endif
	//是否可用
	bool IsValid();

protected:
	u32		m_handle;	//对象句柄
	u32		m_usage;	//用法
	u32		m_target;	//类型
};
//VBO
class ssVBO : public ssBO
{
public:  
	ssVBO();
	static void Nonuse();
};
//IBO
class ssIBO : public ssBO
{  
public:  
	ssIBO();
	static void Nonuse();
};
#ifndef SS_USE_GLES2
//PBO
class ssPBO : public ssBO
{
public:
	ssPBO();
	//修改target
	void SetTarget(u32 target);

	static void Nonuse();
};
#endif

}
#endif
